// pages/mine/index.js
const app = getApp();
const db = app.db;


Page({

  /**
   * 页面的初始数据
   */
  data: {
    isLogin:false,//登录状态：默认未登录
    isEditing: false, // 是否处于编辑模式1223
    cardCur: 0,
    swiperList: [
      { id: 0, path: '/resource/mine/tab-image2.jpg', },
      { id: 1, path: '/resource/mine/tab-image1.jpg',  }
    ],
    userInfo: {
      avatar: '',    // 头像地址
      username: '',  // 用户名
      phone: ''      // 脱敏后的手机号
    }
  },
  handleLogin(){
    wx.navigateTo({
      url: '/pages/Login/index',
    })
  }, 
  // 点击头像上传
  async chooseAvatar() {
    // 1. 检查登录状态
    if (!this.data.isLogin) {
      wx.showToast({ title: '请先登录', icon: 'none' });
      return;
    }
  
    try {
      // 2. 选择图片（使用正确的 API 调用方式）
      const chooseRes = await wx.chooseMedia({
        count: 1,
        mediaType: ['image']
        // 不要在这里使用 success 回调，await 会直接返回结果
      });
  
      // 3. 获取临时图片路径（注意数据结构）
      console.log('选择图片结果:', chooseRes); // 调试用
      if (!chooseRes || !chooseRes.tempFiles || chooseRes.tempFiles.length === 0) {
        wx.showToast({ title: '未选择图片', icon: 'none' });
        return;
      }
      
      const tempFilePath = chooseRes.tempFiles[0].tempFilePath;
      if (!tempFilePath) {
        wx.showToast({ title: '获取图片路径失败', icon: 'none' });
        return;
      }
  
      // 4. 上传到云存储
      const timestamp = Date.now();
      const cloudPath = `avatars/${timestamp}-${Math.random().toString(36).substr(2, 10)}.jpg`;
  
      const uploadRes = await wx.cloud.uploadFile({
        cloudPath: cloudPath,
        filePath: tempFilePath // 注意：这里参数名是 filePath，不是 fileContent
      });
  
      // 5. 获取云文件 ID
      const fileID = uploadRes.fileID;
      if (!fileID) {
        wx.showToast({ title: '上传失败', icon: 'none' });
        return;
      }
  
      // 6. 更新数据库
      await db.collection('user')
        .where({ phone: this.data.userInfo.rawPhone })
        .update({
          data: { avatarUrl: fileID }
        });
  
      // 7. 更新本地视图
      this.setData({
        'userInfo.avatar': fileID
      });
  
      wx.showToast({ title: '头像更新成功', icon: 'success' });
    } catch (err) {
      console.error('头像上传失败:', err);
      
      // 更详细的错误提示
      if (err.errMsg.includes('cancel')) {
        wx.showToast({ title: '用户取消选择', icon: 'none' });
      } else if (err.errMsg.includes('auth deny')) {
        wx.showToast({ title: '请授权相册访问', icon: 'none' });
      } else {
        wx.showToast({ title: '上传失败，请重试', icon: 'none' });
      }
    }
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 初始化登录状态（从本地存储读取）
    const isLogin = wx.getStorageSync('isLogin') || false;
    this.setData({ isLogin });
    // 页面显示时查询用户信息（确保登录状态有效）
    if (isLogin) {
      this.loadUserInfo(); // 自定义方法：从user集合查询用户信息
    }
  },

  // 从数据库查询用户信息
  async loadUserInfo() {
    const loginPhone = wx.getStorageSync('loginPhone');
    if (!loginPhone) {
      console.log('未获取到登录手机号，无法查询用户信息');
      return; // 未登录时直接返回，避免无效查询
    }
  
    try {
      // 查询 user 集合中当前手机号的记录
      const res = await db.collection('user')
        .where({ phone: loginPhone }) 
        .limit(1)
        .get();
      // 处理查询结果（数据库中的用户数据）
      const userData = res.data[0];
      // 手机号脱敏处理
      const maskPhone = (phone) => {
        if (!phone) return '';
        return phone.replace(/^(\d{3})(\d{4})(\d{4})$/, '$1****$3'); 
      };
  
      // 4. 更新页面数据
      if (res.data.length > 0) {
        this.setData({
          userInfo: {
            avatar: userData.avatarUrl || '/resource/mine/avator.jpg',  // 数据库头像地址
            username: userData.nickname || '微信用户',  //文本上的用户名
            rawPhone: loginPhone, // 保存原始手机号（用于后续更新）
            showPhone: maskPhone(loginPhone) // 脱敏后的手机号（用于展示）
          },
          editUsername: userData.nickname || '微信用户' //编辑时的用户名
        });
      }
    } catch (err) {
      console.error('查询用户信息失败:', err);
      // 失败时不修改 userInfo，保持现有默认值
    }
  },

  // 显示编辑输入框
  showEditInput() {
    this.setData({ 
      isEditing: true ,
      editUsername: this.data.userInfo.username
    });
  },

  // 取消编辑（失去焦点时）
  cancelEdit() {
    this.setData({ isEditing: false });
  },
  // 实时同步用户名输入
  onUsernameInput(e) {
    const inputValue = e.detail.value;
    this.setData({
      editUsername: inputValue // 实时更新 editUsername
    });
  },
  // 确认修改（回车）
  async confirmEdit() {
    const { editUsername, userInfo } = this.data;
    const newUsername = editUsername.trim();

    // 校验：用户名不为空且长度合理
    if (!newUsername || newUsername.length > 10) {
      wx.showToast({ title: '请输入1-10位用户名', icon: 'none' });
      return;
    }
    // 新增：判断是否与原昵称相同
    if (newUsername === userInfo.username) {
      wx.showToast({ title: '用户名未修改', icon: 'none' });
      this.setData({ isEditing: false }); // 退出编辑模式
      return;
    }

    try {
       await db.collection('user')
        .where({ phone: userInfo.rawPhone })
        . get();
      // 更新数据库：通过手机号定位用户，修改 nickname 字段
       await db.collection('user')
        .where({ phone: userInfo.rawPhone })
        .update({
          data: { nickname: newUsername } // 数据库中用 nickname 存储用户名
        });

      // 同步更新本地状态（页面实时刷新）
      this.setData({
        'userInfo.username': newUsername,
        isEditing: false // 退出编辑模式
      });

      wx.showToast({ title: '用户名修改成功', icon: 'success' });
    } catch (err) {
      console.error('修改用户名失败:', err);
      wx.showToast({ title: '修改失败，请重试', icon: 'none' });
    }
  },

  //退出登录
    handleExit(){
      wx.navigateTo({
        url: '/pages/exit/index',
      })
    },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})